$NG.AllReady(function (page, { useValuesChange,useDataIndexChange,useUpdateRows,useUpdateRow,useBeforeClick }) {
    //获取控件,
    var mstfrom = $NG.getCmpApi("p_form_tenancy_change_m");
    var grid = $NG.getCmpApi("p_form_tenancy_change_d");
    var mstfromtool = $NG.getCmpApi("toolbar_top")
    if(page.oType =='add'){
        $NG.updateState((updater)=>{
            updater.data.p_form_tenancy_change_m.setProps({
                bill_name:'租房申请变更',
                u_ywlx:'租凭费',
                creator:{
                    label:$NG.getUser().userName,
                    value:$NG.getUser().userID
                }
            })
        })
    }

    //按钮相关

    function generate15DigitNumber(arr) {
        if(!arr){
            let str = "";
			// 获取当前时间戳
			let timestamp = Date.now().toString();
			// 如果时间戳不足 15 位，计算需要补充的位数
			let remainingLength = 15 - timestamp.length;
			if (remainingLength > 0) {
				// 生成指定长度的随机数
				let randomPart = "";
				for (let i = 0; i < remainingLength; i++) {
					randomPart += Math.floor(Math.random() * 10);
				}
				// 将时间戳和随机数拼接成 15 位数字
				str = String(timestamp + randomPart);
			} else {
				// 如果时间戳长度超过 15 位，截取前 15 位
				str = String(timestamp.slice(0, 15));
			}
            return str
        }

		arr.forEach((item) => {
			let str = "";
			// 获取当前时间戳
			let timestamp = Date.now().toString();
			// 如果时间戳不足 15 位，计算需要补充的位数
			let remainingLength = 15 - timestamp.length;
			if (remainingLength > 0) {
				// 生成指定长度的随机数
				let randomPart = "";
				for (let i = 0; i < remainingLength; i++) {
					randomPart += Math.floor(Math.random() * 10);
				}
				// 将时间戳和随机数拼接成 15 位数字
				str = String(timestamp + randomPart);
			} else {
				// 如果时间戳长度超过 15 位，截取前 15 位
				str = String(timestamp.slice(0, 15));
			}
			if (!item.u_phid) {
				item.u_phid = str;
				dgrid1.refreshView();
				dgrid2.refreshView();
				dgrid3.refreshView();
				dgrid4.refreshView();
			}
		});
	}

    useValuesChange(({args})=>{
        const _data = args[0]
        console.log(`项目监听`,_data);
        getProjectInfo()
        ZfMFilter()
    },"p_form_tenancy_change_m.phid_pc")
    getProjectInfo();
    useValuesChange(({args})=>{
        sDtToeDt(mstfrom.getItem("u_ex_start_dt").getValue(),mstfrom.getItem("u_ex_end_dt").getValue())
    },"p_form_tenancy_change_m.u_ex_start_dt")
    useValuesChange(({args})=>{
        sDtToeDt(mstfrom.getItem("u_ex_start_dt").getValue(),mstfrom.getItem("u_ex_end_dt").getValue())
    },"p_form_tenancy_change_m.u_ex_end_dt")
        //计算申请月数
        function sDtToeDt(date1, date2) {
			const st = new Date(date1);
			const et = new Date(date2);
			const day = et - st;
			console.log("day", day);
			window.monthNum = (
				Number(Math.ceil((et - st) / (1000 * 60 * 60 * 24)) / 30) || 0
			).toFixed(2);
            const arr = grid.getRows()
            arr.forEach(item=>{
                item.u_start_dt = mstfrom.getItem("u_ex_start_dt").getValue() 
                item.u_end_dt = mstfrom.getItem("u_ex_end_dt").getValue()
                item.u_xmonth = sumDate(item.u_start_dt,item.u_end_dt)
            })
            setTimeout(()=>{
                sumAmt()
            },300)
            grid.refreshView()
		}
	// 获取项目
	function getProjectInfo(phid=mstfrom.getItem("phid_pc").getValue(),lock = false) {
		if (!phid) return;
		$NG.execServer("getPtInfoByPhid", {phid}, (res) => {
			const _data = JSON.parse(res.data)[0].extendObjects;
			console.log(`获取项目信息`, _data);
			$NG.updateState((updater) => {
				updater.data.p_form_tenancy_change_m.setProps({
					u_pc_no: _data.pc_no, //项目编码    
					// u_fycdgs: {
					// 	//事业部or组织
					// 	value: _data.org_phid,
					// 	label: _data.org_name,
					// },
                    u_account_company: {
						//事业部or组织
						value: _data.org_phid,
						label: _data.org_name,
					},
					u_regional_center: {
						//区域中心
						value: _data.regional_center_phid,
						label: _data.regional_center_name,
					},
					u_fycd_dept: {
						//部门
						value: _data.org_phid,
						label: _data.org_name,
					},
                    u_project_manager:{
                        label:_data.project_manager_name,
                        value:_data.project_manager_phid
                    },
                    
				});
			});
            if(lock){
                return _data
            }
		});
	}

    window.__cache_lsz_count_per = 0
    useUpdateRows(({args})=>{
        sumAmt()
    },"p_form_tenancy_change_d")

    useValuesChange(({args})=>{
        getZfsqRoi()
    },"p_form_tenancy_change_m.u_tenancy")

    // amtReduce(["u_rent_amt_vat","u_month","u_rent_amt","u_rent_amt_vat","amt","u_taxrate","u_taxe_amt","u_zj_amt","u_rent_prc_vat"])
    // function amtReduce(arr){
    //     arr.forEach(item=>{
    //         useDataIndexChange(({args})=>{
    //             amtReduce_d(args)
    //         },item)
    //     })
    // }

    function sumAmt(){
        const arr = grid.getRows()
        let _count_per = 0
        let _count_total_amt = 0
        generate15DigitNumber(arr)
        arr.forEach(item=>{
            if(!item.u_phid){
                item.u_phid = generate15DigitNumber()
            }
            if(!item.u_start_dt){
                item.u_start_dt = mstfrom.getItem("u_ex_start_dt").getValue()
            }
            if(!item.u_end_dt){
                item.u_end_dt = mstfrom.getItem("u_ex_end_dt").getValue()
            }
            const perNum = (Number(item.u_sjrzrs) || 0)
            const mj = (Number(item.u_zfmj) || 0)
            if(perNum * 40 < mj){
                $NG.alert("租房面积超出规定面积!")
                item.u_zfmj = 0
            }
            
            if(!item.u_taxrate){
                item.u_taxrate=0
            }
            _count_per+=(Number(item.u_sjrzrs) || 0)
            item.u_xmonth = sumDate(item.u_start_dt,item.u_end_dt)
            //房租含税
            item.u_rent_amt_vat = (Number(item.u_rent_prc_vat) || 0) * (Number(item.u_xmonth) || 0);
            //房租未税
            item.u_rent_amt = (Number(item.u_rent_amt_vat) || 0) * (1 - Number(item.u_taxrate))
            //税额
            item.u_taxe_amt = Number(item.u_rent_amt_vat) - Number(item.u_rent_amt);
            //重新计算总额
            item.u_total_amt = (Number(item.u_rent_amt_vat)||0)+(Number(item.u_zj_amt)||0)
            item.u_sqwszje = (Number(item.u_rent_amt) || 0) + (Number(item.u_zj_amt) || 0)
            
            //判断中介费是否超出
            if(item.u_zj_amt > item.u_rent_prc_vat){
                item.u_zj_amt = 0
                $NG.alert("中介费超出月租含税金额，不允许填写!")
            }
            _count_total_amt += (Number(item.u_total_amt) || 0)
            console.log(`总金额`,_count_total_amt,(Number(item.u_total_amt) || 0),item.u_total_amt,item);
            $NG.updateState((updater)=>{
                updater.data.p_form_tenancy_change_m.setProps({
                    u_sq_amt:_count_total_amt
                })
            })
        })
        // 计算总价
        // arr.forEach(item=>{
        //     item.u_total = (Number(item.u_rent_prc)||0)*(Number(item.u_month)||0)+(Number(item.u_taxe_amt)||0)+(Number(item.u_zj_amt)||0)
        // })
        // if(window.__cache_lsz_count_per!=_count_per){
        //     window.__cache_lsz_count_per = _count_per
        //     $NG.updateState((updater)=>{
        //         updater.data.p_form_tenancy_change_m.setProps({
        //             u_rz_qyt:_count_per
        //         })
        //     })
        // }
        kzCode()
        grid.refreshView()
    }

    //过滤费用项目
    cntDFilter();
	function cntDFilter() {
		$NG.updateUI((updater) =>
			updater.editGrid.p_form_tenancy_change_d.u_cost_pc.setProps((p) => {
				return {
					...p,
					editor: {
						...p.editor,
						clientSqlFilter: ("phid in ('8570000000000381','8570000000000347')")
					},
				};
			})
		);
	}

    function amtReduce_d(args){

        const row = args[0];
        console.log(`行`,row);
            
        
    }
// 控制费用选择
    function kzCode(){
        console.log(`开始过滤`,);
        window._catch_fycode = null
        try{
            grid.getRows().forEach((item)=>{
            if(item.u_cost_pc){
               window._catch_fycode = {
                    u_cost_pc:item.u_cost_pc,
                    u_cost_pc_EXName:item.u_cost_pc_EXName
               }
               throw "终止forEach"
            }
        })
        }catch(e){}
        if(window._catch_fycode){
            console.log(`单一过滤`,"phid = "+window._catch_fycode.u_cost_pc);
            $NG.updateUI((updater) =>
			updater.editGrid.p_form_tenancy_change_d.u_cost_pc.setProps((p) => {
				return {
					...p,
					editor: {
						...p.editor,
						clientSqlFilter: "phid = "+window._catch_fycode.u_cost_pc
					},
				};
			})
		);
        } else {
            $NG.updateUI((updater) =>
			updater.editGrid.p_form_tenancy_change_d.u_cost_pc.setProps((p) => {
				return {
					...p,
					editor: {
						...p.editor,
						clientSqlFilter: ("phid in ('8570000000000381','8570000000000347')")
					},
				};
			})
		);
        }

        // 时间隐藏
        const len = grid.getRows().length
        let disabled = false
        if(len == 0){
            disabled = false
        } else {
            disabled = true
        }
        console.log(`disable`,disabled);
        $NG.updateUI((updater) =>
			updater.fieldSetForm.p_form_tenancy_change_m.u_ex_start_dt.setProps({
                disabled:disabled
        }));
        $NG.updateUI((updater) =>
			updater.fieldSetForm.p_form_tenancy_change_m.u_ex_end_dt.setProps({
                disabled:disabled
        }));
    }

    zhufangbiaozhun(["u_city","u_floor"])
    function zhufangbiaozhun(arr){
        arr.forEach(item=>{
            useDataIndexChange(({args})=>{
                const city_phid = args[0].u_city
                const ceng = args[0].u_floor
                if(city_phid&&ceng){
                    $NG.execServer('getRentalStandardsByCity',{city_phid}, function(res){
                        console.log(`住房`,res, city_phid, ceng);
                        if(res.count == 0) return
                        const _data = JSON.parse(res.data)[0].extendObjects
                        if(ceng == '1'){
                            args[0].u_bzbz = _data.u_gcwybz
                        } else {
                            args[0].u_bzbz = _data.u_dcwybz
                        }
                        args[0].u_zfbz = _data.u_bz
                        args[0].u_city_type=_data.u_cslb
                        grid.refreshView()
                    })
                }
                
            },item)
        })
    }

    //获取原信息
    function getZfsqRoi(){
        $NG.execServer("getZfsqRoi", {phid:mstfrom.getItem("u_tenancy").getValue()}, function (res){
            console.log(res,mstfrom.getItem("u_tenancy").getValue());
            if(res.count == 0) return 
            const _data = JSON.parse(res.data)[0].extendObjects
            console.log(`表头原数据`,_data);
            $NG.updateState((updater)=>{
                updater.data.p_form_tenancy_change_m.setProps({
                    u_source_phid:_data.mphid,
                    u_tenancy_no:_data.bill_no,
                    u_ex_start_dt_ori:_data.u_start_dt,
                    u_ex_end_dt_ori:_data.u_end_dt,
                    u_ex_start_dt:_data.u_start_dt,
                    u_ex_end_dt:_data.u_end_dt,
                    u_sq_amt_ori:_data.u_sq_amt,
                    u_fycdgs:{
                        value:_data.u_fycdgs,
                        label:_data.u_fycdgs_exname
                    },
                    u_fycd_dept:{
                        label:_data.u_fycd_dept_exname,
                        value:_data.u_fycd_dept
                    },
                    phid_fcur:{
                        value:_data.phid_fcur,
                        label:_data.name_fcur
                    },
                    exchangerate:_data.exchangerate,
                    u_old_app:{
                        label:_data.creator_exname,
                        value:_data.creator
                    }
                })
            })
            //禁用明细带出
            const _arr = []
            JSON.parse(res.data).forEach((items)=>{
                const item = items.extendObjects
                _arr.push({
                    u_source_phid:item.dphid,
                    u_cost_pc:item.u_cost_pc,
                    u_cost_pc_EXName:item.u_cost_pc_exname,
                    u_city:item.u_city,
                    u_city_EXName:item.u_city_exname,
                    u_city_type:item.u_city_type,
                    u_zfbz:item.u_zfbz,
                    u_floor:item.u_floor,
                    u_start_dt:item.d_u_start_dt,
                    u_end_dt:item.d_u_end_dt,
                    u_bzbz:item.u_bzbz,
                    u_hx:item.u_hx,
                    u_zfmj:item.u_zfmj,
                    u_krzrs:item.u_krzrs,
                    u_sjrzrs:item.u_sjrzrs,
                    u_month:item.u_month,
                    u_xmonth:item.u_month,
                    u_rent_prc_vat:item.u_rent_prc,
                    u_rent_amt_vat:item.u_amt_vat,
                    u_taxrate:item.taxrate,
                    u_deposit:item.u_deposit,
                    u_zjzfpl:item.u_zjzfpl,
                    u_sdrqf:item.u_sdrqf,
                    u_zf_address:item.u_zf_address,
                    u_taxe_amt:item.u_taxe_amt,
                    u_rent_amt:item.u_amt_vat,
                    u_zj_amt:item.u_zj_amt,
                    u_total_amt:item.amt,
                    u_wyf:item.u_wyf,
                    u_xxf:item.u_xxf,
                    u_qnf:item.u_qnf,
                    u_is_xz:item.u_is_xz
                })
            })
            grid.clearRows().then(()=>{
                grid.addRows(_arr)
            })
        })
    }
    //判断预期日期是否合理
    // 传入开始时间和结束时间字符串，传入一个回调函数用来清空时间字段：()=>{ 清空逻辑 }
    //示例
    useValuesChange(({args})=>{
        isDate(mstfrom.getItem("bill_dt").getValue(), mstfrom.getItem("u_ex_end_dt").getValue(), ()=>{
            $NG.updateState((updater)=>{
                updater.data.p_form_tenancy_m.setProps({
                    u_end_dt:null
                })
            })
        })
    },"p_form_tenancy_change_m.u_ex_end_dt")
    function isDate(startDate, endDate, fun){
        try{
            const sDate = new Date(startDate).getTime()
            const eDate = new Date(endDate).getTime()
            let time = eDate-sDate
            if(time<0){
                if(!fun){
                    $NG.alert("报错函数：isDate，没有传入回调函数！")
                }else{
                    $NG.alert("预计结束时间不得小于申请时间")
                    fun()
                }
            }
        }catch(err){
            $NG.alert("报错函数：isDate，传入的字符串不合法")
        }
    }


    // 过滤
    ZfMFilter()
function ZfMFilter() {
    $NG.updateUI((updater, state) => {
        console.log('过滤参数检查', updater);
        updater.fieldSetForm.p_form_tenancy_change_m.u_tenancy.setProps({
            onBeforeOpen: async () => {
                var phid_pc = $NG.getCmpApi('p_form_tenancy_change_m').getItem('phid_pc').getValue();
                if (!phid_pc) {
                    $NG.alert("请先选择项目");
                    return false;
                } else {
                    return true;
                }
            },
            ...(!!$NG.getCmpApi('p_form_tenancy_change_m').getItem('phid_pc').getValue() && {
                clientSqlFilter: {
                    phid_pc: $NG.getCmpApi('p_form_tenancy_change_m').getItem('phid_pc').getValue()
                }
            }),
        });
    });
}




    // 根据费用编码带出费用名称
    function getFynameByFyno(phid,fun){
        $NG.execServer("getFynameByFyno", {phid},function(res){
            console.log(res);
            if(res.count ==0||!phid)return 
            const _data = JSON.parse(res.data)[0].extendObjects
            fun(_data)
        })
    }
    //时间计算(月份)
    function sumDate(start,end){
        console.log(`时间`,start,end);
        const staDt = new Date(start).getTime()
        const endDt = new Date(end).getTime()
        const sum = endDt-staDt
        const month = Number(Number(sum)/1000/60/60/24/30).toFixed(2)
        return month
    }
    // useBeforeClick(function ({ args }) {
    //     //按钮点击前事件
    //     console.log("save按钮点击");
    //     const _arrs = grid.getRows()
    //     console.log(_arrs)
    //     let _cache_index = _arrs.reduce((value,item,index)=>{
    //         if(Number(item.u_rent_prc>(Number(item.u_sjrzrs)||0)*(Number(item.u_zfbz)||0))){
    //             value.push(index+1)
    //         }
    //             return value
    //     },[])
    //     if(_cache_index.length>0){
    //         $NG.alert(`表体明细中第 ${_cache_index.join("、")} 行中，月租含税金额超出->人数*租房标准，不符合规范，请修改!!`)
    //         return false
    //     }else {
    //         console.log(`可保存`,);
    //         return true}
    // }, "save");
    //生成明细主键
    function generate15DigitNumber(arr) {
        if(!arr){
            let str = "";
			// 获取当前时间戳
			let timestamp = Date.now().toString();
			// 如果时间戳不足 15 位，计算需要补充的位数
			let remainingLength = 15 - timestamp.length;
			if (remainingLength > 0) {
				// 生成指定长度的随机数
				let randomPart = "";
				for (let i = 0; i < remainingLength; i++) {
					randomPart += Math.floor(Math.random() * 10);
				}
				// 将时间戳和随机数拼接成 15 位数字
				str = String(timestamp + randomPart);
			} else {
				// 如果时间戳长度超过 15 位，截取前 15 位
				str = String(timestamp.slice(0, 15));
			}
            return str
        }
    }
});

